import dayjs from 'dayjs'
import { isNil } from 'lodash-es'
import { computed, type Ref } from 'vue'

type MapFn = (startTime: string, endTime: string) => Record<string, string>

/**
 * 对表单的日期范围查询进行值转换
 *
 * 默认输出结构：
 *
 * ```
 * {
 *  "startTime": ...
 *  "endTime": ...
 * }
 * ```
 * @param valueRef 原始表单日期值的 ref
 * @param format 日期的格式，默认为 YYYY/MM/DD
 * @param mapFn 参数数据映射，用于设置输出参数的数据结构
 * @returns 格式化并进行映射后的数据
 */
export default function useDateRangeParams(
  valueRef: Ref<[Date, Date]>,
  format = 'YYYY/MM/DD',
  mapFn: MapFn = (startTime, endTime) => ({
    startTime,
    endTime,
  })
) {
  const dateRangeParams = computed(() =>
    isNil(valueRef.value) || valueRef.value.some(isNil)
      ? null
      : mapFn(dayjs(valueRef.value[0]).format(format), dayjs(valueRef.value[1]).format(format))
  )

  return { dateRangeParams }
}
